package feeinterface.protocol.req;

import org.apache.log4j.Logger;

import com.ulwx.tool.CTime;
import com.ulwx.tool.StringUtils;

import feeinterface.dao.BaseImsiPhoneDao;
import feeinterface.dao.BasePhoneAreaDao;
import feeinterface.dao.BaseSmsModemGetPhoneRecDao;
import feeinterface.modeldb.BaseImsiPhone;
import feeinterface.modeldb.BasePhoneArea;
import feeinterface.modeldb.BaseSmsModemGetPhoneRec;
import feeinterface.protocol.res.Res010006;
import feeinterface.protocol.utils.Constants;
import feeinterface.utils.PhoneUtils;

/**
 * 第三方获取手机号码接口回调协议（代码010006）
 * 
 * URL?myurl=URL_UTF8 {http://<myip>:<port>/interface/dmusp/exchange? var=<
 * Protocol >_<IMSI>_<ExtVar>_< ThirdPartyUrlID >} 红色字体为我们提供的地址，第三方接口服务器会把
 * “&mobile =< mobile >”拼装到红色字体的地址上，当客户端重定向时，请求的是我们提供的服务器地址，即请求的是
 * “http://<myip>:<port>/interface/dmusp/exchange? var=< content >& mobile
 * =<mobile >” 参数名phone会根据不同的第三方而不同，content的格式的含义见下面协议请求的部分：
 * 
 * @author 黄杰
 * 
 */
public class Pro010006 extends ProExchange {
	/**
	 * 日志
	 */
	private  static  Logger log = Logger.getLogger(Pro010006.class); // 跟类名一样

	@Override
	public Object genBean() throws Exception {
		Res010006 res = new Res010006();
		try {

			// 通过手机号码获得地区id
			this.Mobile = PhoneUtils.getAdjustedPhone(this.Mobile);
			//根据手机号码前7位获取 运营商,省份和地区
			BasePhoneArea ba = BasePhoneAreaDao.getByPhone(this.Mobile
					.substring(0, 7));
			
            //短信猫手机号码获取接收记录
			BaseSmsModemGetPhoneRec bsmg = new BaseSmsModemGetPhoneRec();
			if (ba != null) {
				bsmg.setCityID(ba.getCityID());
				bsmg.setProvinceID(ba.getProvinceID());
			}
			bsmg.setIMSI(this.IMSI);
			bsmg.setPhone(this.Mobile);
			bsmg.setModemPort(ThirdPartyUrlID + "");// 第三方接口id
			// < 010006>_<IMSI>_<Mobile>_< ThirdPartyUrlID >
			bsmg.setSmsContent("010006_" + IMSI + "_" + this.Mobile + "_"
					+ ThirdPartyUrlID);
			bsmg.setUpdateTIme(CTime.getCurrentDateTime());

			try {
				BaseSmsModemGetPhoneRecDao.InsertData(bsmg);
			} catch (Exception e) {
				log.error("保存短信猫手机号码获取接收记录表出错！", e);
				throw new ExchangeException(Constants.Status.FAIL, "保存短信猫手机号码获取接收记录表出错！");
			}
			// 如果IMSI卡号和手机号码都不为空则 进行操作
			if (StringUtils.hasText(IMSI) && StringUtils.hasText(this.Mobile)) {

				BaseImsiPhone bp = new BaseImsiPhone();
				bp.setIMSI(this.IMSI);
				bp.setPhone(this.Mobile);
				bp.setCityID(ba.getCityID());
				bp.setProvinceID(ba.getProvinceID());
				bp.setUpdateTime(CTime.getCurrentDateTime());
				try {
					BaseImsiPhoneDao.Insert(bp);
				} catch (Exception ex) {
					log.error("保存IMSI与手机号码的对应表出错！", ex);
					throw new ExchangeException(Constants.Status.FAIL, "保存IMSI与手机号码的对应表出错！");
				}
			}
			res.Status = Constants.Status.SUCCESS;
			res.Message = "获取手机号码成功！";
			res.Mobile = this.Mobile;
		} catch (Exception e) {
			log.error("获取手机号码失败！", e);
			throw new ExchangeException(Constants.Status.FAIL, "获取手机号码失败！");
		}
		return res;
	}

	@Override
	public String validate() throws Exception {
		if (IMSI != null) {
			IMSI = "";
		}
		return null;
	}

	/**
	 * 手机卡的imsi
	 */
	public String IMSI;
	/**
	 * 扩展字符串
	 */
	public String ExtVar;
	/**
	 * 第三方地址id，对应于BaseThirdPartyURL表的流水号
	 */
	public Integer ThirdPartyUrlID;
	/**
	 * 手机号码
	 */
	public String Mobile;

	/**
	 * 无参构造函数
	 */
	public Pro010006() {
		this.Protocol = "010006";
	}

}
